package main

import (
	"bufio"
	"fmt"
	"io"
	"os"
	"strconv"
	"strings"
)

func main() {
	fmt.Println(
		sum2(100),
		convertToBin(5), // 101
		// convertToBin(13), // 1011 -> 1101  不断对2取模再颠倒
		// convertToBin(1324234243),
		convertToBin(0))

	printFile("src/basic/go", false)

	fmt.Println("printing a string:")
	s := `abc"d"
	kkkk
	123
	p`
	printStringContents(strings.NewReader(s)) // 字符串当做文件

	// forever()
}
func sum2(n int) int {
	sum := 0
	for i := 0; i <= 100; i++ {
		sum += i
	}
	return sum
}

/**
 * for  整数转二进制
 * 对2取模取出来是最低位，不停往前加
 */
func convertToBin(n int) string {
	result := ""
	for ; n > 0; n /= 2 { // 无初始条件,结束条件n > 0,递增条件n / 2
		lsb := n % 2 // 最低位
		print(n, "-", lsb)
		// 转字符串
		result = strconv.Itoa(lsb) + result
	}
	return result
}

// 一行一行读取
func printFile(filename string, flag bool) {
	file, err := os.Open(filename)
	if err != nil {
		panic(err)
	}
	if flag {
		printFileContents(file)
	} else {
		printStringContents(file)
	}

}

// 读取字符串
func printStringContents(reader io.Reader) {
	scanner := bufio.NewScanner(reader)

	// 无初始条件 结束条件就是while
	for scanner.Scan() {
		fmt.Println(scanner.Text())
	}
}

// 读取文件
func printFileContents(file *os.File) {
	scanner := bufio.NewScanner(file)
	for scanner.Scan() {
		fmt.Println(scanner.Text())
	}
}

// 死循环
func forever() {
	for {
		fmt.Println("abc")
	}
}
